home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
amok_lha
/
amok82.lha
/
Plot
/
plot.dok
< prev
next >
Wrap
Text File
|
1993-08-15
|
10KB
|
313 lines
Plot 3.1.93
Stefan Köhle
Erhardtstr. 10
W-7033 Herrenberg
Tel. 07032/5146
Dieses Programm ist Public Domain,
es darf ohne Einschränkungen benutzt, kopiert und verteilt werden,
solange sich niemand daran bereichert; der Preis pro Diskette darf
nicht mehr als 5 DM betragen.
Plot dient dazu, Funktionen in zwei Variablen zu zeichnen.
Benötigt werden dazu:
Die Req.Library, die ReqTools.Library, die Mathieedubbas.Library,
die Mathtrans.Library und die IFF.Library im Libs: -Ordner.
Sie befinden sich auf dieser Diskette im Libs -Ordner.
Desweiteren 1 Amiga, Kickstart 1.2, 1.3, 2.x.
Unter Kick 1.1 tuts nicht.
Unter Kick 2.x tuts zwar, die neuen Grafikmodi werden aber nicht
unterstützt.
Speicherverbrauch:
1 MB reicht für die Sparversion (kleine Bitmap),
ab 1.5 MB tuts dann richtig. Der Speicher darf aber nicht zu sehr
fragmentiert sein.
Bei 512 KB Chipmem kanns beim Start über die Workbench von der Festplatte
eng werden, wenn die Platte zuviel Cache Speicher braucht.
Start von Diskette oder übers CLI kann helfen.
Start von der Workbench: Doppelklick aufs Icon.
Es wird ein Screen geöffnet und ein Stringrequester fordert die Eingabe
einer Funktion. Er wird durch RETURN oder durch Drücken von OK beendet.
Falls die Funktion Fehler enthalten sollte, erscheint der Stringrequester
nochmal, wobei im Fenstertitel der Fehler moniert wird.
Falls der Stringrequester mit CANCEL beendet wird, oder nur RETURN
gedrückt wird, kommt der Filerequester.
Aufruf vom CLI aus: Plot oder: Plot Argument
Argument ist entweder die Funktion selber, oder der Name einer schon
gespeicherten Funktion.
Es wird versucht, 'Argument' im eventuell vorhandenen Directory
'Funktionen' zu laden. Falls es kein 'Funktionen' gibt, wird versucht
'Argument' im aktuellen Directory zu laden. Erst wenn das auch nicht geht,
wird 'Argument' als Funktion interpretiert.
Wenn die Funktion Fehler enthält, kommt der Stringrequester so lange bis
keine Fehler mehr drin sind.
Bsp: plot sin(x^2)+cos(y^2) oder plot Funktion1
Die Funktion wird zuerst auf kleiner Bitmap gezeichnet (640 x 512).
Wenn der Ausschnitt, die Auflösung und sonstige Layoutarbeiten beendet sind,
kann auf die große Bitmap umgeschaltet werden. (1720 x 1351)
Hier kann man nur noch die Auflösung ändern.
Unterstützte Funktionen:
sin sinh arcsin arsinh
cos cosh arccos arcosh
tan tanh arctan artanh
cot coth arccot arcoth
sec cosec
sqr sqrt
log ln exp
fac
abs
int
Menüs:
Projekt
neue Funktion: Der Stringrequester erscheint, alle Faktoren werden
auf die Defaultwerte gesetzt, es wird auf die kleine
Bitmap umgeschaltet.
Funktion ändern: Der Stringrequester erscheint mit der Funktion, welche
ediert werden kann. Faktoren bleiben erhalten.
Funktion laden: Eine Funktion wird geladen, mit allen Faktoren und
sonstigen Einstellungen, es wird auf jeden Fall mit
kleiner Bitmap begonnen.
Funktion speichern: Eine Funktion wird als String gespeichert mit allen
Faktoren und sonstigen Einstellungen.
Falls ein Directory 'Funktionen' existiert, wird
dorthin verzweigt, sonst nicht.
Bild speichern: Die gezeichnete Funktion wird als IFF Bild gespeichert.
Falls ein Directory 'Bilder' existiert, wird dorthin
verzweigt, sonst nicht.
Je nach gewählter Bitmapgröße als 640 x 512 bei
kleiner Bitmap, oder als 1720 x 1351 bei großer Bitmap.
An den Namen wird, wenn nicht schon vorhanden, ein .IFF
drangehängt.
Bild laden: Funktioniert noch nicht. Irgendwie tut die Ladeprocedur
aus der IFF.Library nicht mit Superbitmap Windows.
Wer weiß, wies geht, möge es mir kundtun.
Quit: Ende. Geht auch mit ESC.
Auflösung
lächerlich: Es werden bei kleiner Bitmap 16 x 12 = 192 , und
bei grosser Bitmap 48 x 36 = 1728 Punkte
berechnet.
gering: Es werden bei kleiner Bitmap 24 x 18 = 432 , und
bei grosser Bitmap 72 x 54 = 3888 Punkte
berechnet.
mittel: Es werden bei kleiner Bitmap 32 x 24 = 768 berechnet.
Bei großer Bitmap passt das mit der Rasterung nicht so
ganz, daher ist dieser Punkt dann nicht anwählbar.
hoch: Es werden bei kleiner Bitmap 48 x 36 = 1728 , und
bei grosser Bitmap 144 x 108 = 15552 Punkte
berechnet.
noch höher: Es werden bei kleiner Bitmap 96 x 72 = 6912 , und
bei grosser Bitmap 288 x 216 = 62208 Punkte
berechnet.
Einstellungen
Raster: Es werden gestrichelte Hilfslinien gezeichnet.
Kasten: Es wird ein Kasten gezeichnet, der den Zeichenraum umrahmt.
Achsen: Die Achsen werden eingezeichnet.
Beschriftung: Die Achsen werden beschriftet.
Fläche: Die Funktion wird ausgefüllt gezeichnet, was aussieht
wie hidden-lines.
Bei nicht-Fläche gibts Liniengrafik, was viel schneller geht,
aber leicht unübersichtlich wird.
f(x,y) reinschreiben: Die Funktion wird oben links reingeschrieben.
Kleine Bitmap: Ein normaler Hires Interlace Screen (640 * 512).
Große Bitmap: Ein Hires Interlace Screen aber mit SuperBitmap Window
und mit einer 1720 x 1351 Punkte großen Bitmap.
Diese wird mit der Maus gescrollt. Bei zu wenig Speicher
ist dieser Menüpunkt nicht anwählbar, dann kommt aber
schon beim Programmstart ein Requester, der darauf
hinweist.
Tastaturbelegung kleine Bitmap:
Mit ESC oder CTRL C wird das Programm beendet.
Die HELP - Taste bringt ein Fenster, in dem die Tastaturbelegung
gezeigt wird. Das Fenster ist nur aktiv solange die HELP-Taste
gedrückt ist. Nur bei kleiner Bitmap.
Der gezeigte Ausschnitt kann in X-Richtung mit den Cursortasten 'links'
und 'rechts', bzw. auf dem Ziffernblock mit den Tasten '4' und '6' um
eine halbe Einheit nach links bzw. nach rechts verschoben werden.
Für die Y-Richtung gibt es die Cursortasten 'rauf' und 'runter'.
Die Z-Richtung wird über die Tasten '8' und '2' auf dem Ziffernblock
bedient.
Mit SHIFT geht es jeweils eine ganze Einheit und mit ALT geht es einen
ganzen Bildschirmausschnitt.
Mit F1 wird hinein gezoomt, mit F6 heraus.
Mit F2 bzw F7 wird die Funktion in X-Richtung gestreckt bzw gestaucht.
F3 F8 Y
F4 F9 Z
Mit F10 gibts wieder die Anfangseinstellung.
Die gleichen Aktionen können auch mit den Zifferntasten direkt unter
den Funktionstasten erreichet werden, falls die Funktionstasten schon
anderweitig vergeben sein sollten.
Tastaturbelegung große Bitmap:
Mit ESC kann das Programm beendet werden.
N' paar Rechenzeiten, gemessen auf Amiga 1000:
f(x,y) = sin(x^2+y^2) (in Funktionen als Blubb zu finden)
Auflösung kleine Bitmap große Bitmap
Fläche noch höher 1.27 min 15.38 min
Gitter noch höher 0.48 min 8.06 min
Fläche lächerlich 0.03 min 0.31 min
Gitter lächerlich 0.02 min 0.18 min
Desgleichen auf Amiga 2000 mit 68030-Karte:
Fläche noch höher 0.21 min 3.33 min
Gitter noch höher 0.10 min 1.49 min
Fläche lächerlich 0.012 min 0.09 min
Gitter lächerlich 0.008 min 0.05 min
Zum Programm selber:
Von den 300 KB Source Code stammen 51,8 % von mir, der Rest ist geklaut.
Die Routine, die den Funktionsstring interpretiert, stammt von
Stefan Salewskis R.o.M. (AMOK 11).
Der Filerequester ist aus der Req.Library von Jürgen Zimmermann (AMOK 55)
Die anderen Requester sind aus der Reqtools.Library von Nico Francois,
M2Amiga Portierung von Kai Bolay,
ReqToolsSupport von Frank Lömker (AMOK 69).
Die Routine zum Bild speichern ist aus der IFFLib von Christian A. Weber,
M2Amiga Portierung von Fidtjof Siebert (AMOK 18).
Alle Module sind mit den Optionen -s (kein Stapelcheck), -d (Optimierung),
-y (SMALL-Modell) kompiliert. Das bedeutet 1.5 KB weniger Code und
um die 7 % weniger Rechenzeit.
Gelinkt mit der Option -x (Unützer Code fliegt raus), bringt 4 KB weniger
Code.
Bugs, Unzulänglichkeiten:
- Da aus mir unbekannten Gründen die Codegröße pro Modul auf 32K begrenzt
ist, paßt die Procedur, die das Raster vorne und rechts zeichnet, nicht
mehr ins Hauptprogramm. Daher stoppt das Scrolling währenddessen.
Je nach Auflösung kann das mehrere Sekunden dauern.
- Manchmal gibts Überläufe. Ich kann sie nicht abstellen, weil's mir
jedesmal auch den Debugger zerlegt. Aber ich gebe nicht auf.
z.B: 1/(x^2-y^2)
-1/abs(x*y)
1/(x*y)
- Die Mitteilungsrequester kriege ich einfach nicht auf meinen Screen,
wohingegen der Stringrequester, der genau gleich behandelt wird,
einwandfrei funktioniert.
- Beim Start über die Workbench erscheint immer dieses doofe CLI-Fenster
und ich habe keine Ahnung warum.
- Der Speicherverbrauch ist unnötig hoch, da für alle theoretisch möglichen
62208 Punkte Speicher reserviert wird.
Zukünftige Erweiterungen:
- Speicherverbrauch reduzieren.
- Bild laden. Sobald mir jemand sagt, warum die IFFLib bei SuperBitmaps
versagt.
- Hardcopy vom Programm aus.
- Umsetzung auf OS 3.0 sobald ich meinen Amiga 4000 habe.
- Icons für gespeicherte Funktionen und Bilder mit Default Tool.
Interessante Funktionen, gute Ideen, Kritik, Geld, Geschenke
bitte an obige Addresse.
Viel Spaß! - Stefan -